#!/usr/bin/python
# -*- coding: utf-8 -*-
# @version        : 1.0
# @Create Time    : 2022/12/12 14:31 
# @File           : file_base.py
# @IDE            : PyCharm
# @desc           : 简要说明

import datetime
import os
from application.settings import STATIC_ROOT
from utils.tools import generate_string


class FileBase:
    @classmethod
    def get_random_filename(cls, suffix: str) -> str:
        """
        生成随机文件名称，生成规则：当前时间戳 + 4位随机字符串拼接
        :param suffix: 文件后缀
        :return:
        """
        if not suffix.startswith("."):
            suffix = "." + suffix
        return f"{str(int(datetime.datetime.now().timestamp())) + str(generate_string(4))}{suffix}"

    @classmethod
    def generate_relative_path(cls, path: str, filename: str = None, suffix: str = None) -> str:
        """
        生成相对路径，生成规则：自定义目录/当天日期时间戳/随机文件名称
        1. filename 参数或者 suffix 参数必须填写一个
        2. filename 参数和 suffix 参数都存在则优先取 suffix 参数为后缀
        :param path: static 指定目录类别
        :param filename: 文件名称，只用户获取后缀，不做真实文件名称，避免文件重复问题
        :param suffix: 文件后缀
        """
        if not filename and not suffix:
            raise ValueError("filename 参数或者 suffix 参数必须填写一个")
        elif not suffix and filename:
            name, suffix = os.path.splitext(filename)
        else:
            name = ""
        path = path.replace("\\", "/")
        if path[0] == "/":
            path = path[1:]
        if path[-1] == "/":
            path = path[:-1]
        today = datetime.datetime.strftime(datetime.datetime.now(), "%Y%m%d")
        return f"{path}/{today}/{name}_{cls.get_random_filename(suffix)}"

    @classmethod
    def generate_static_file_path(cls, path: str, filename: str = None, suffix: str = None) -> str:
        """
        生成 static 静态文件路径，生成规则：自定义目录/当天日期时间戳/随机文件名称
        1. filename 参数或者 suffix 参数必须填写一个
        2. filename 参数和 suffix 参数都存在则优先取 suffix 参数为后缀
        :param path: static 指定目录类别
        :param filename: 文件名称，只用户获取后缀，不做真实文件名称，避免文件重复问题
        :param suffix: 文件后缀
        :return:
        """
        return f"{STATIC_ROOT}/{cls.generate_relative_path(path, filename, suffix)}"
